package com.qidian.permission.mapper;

import com.qidian.permission.entity.Permission;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * @Author 18林梦雅
 * @Company 起点编程
 * @Time 2023/10/18 20:18
 * @Description
 */
public interface PermissionMapper {


//    查找权限名称是否已经存在
    Permission selectByPermissionName(String permissionName);

    //根据父权限编号查询权限数据
    /**
     * 通过parentId查询子权限集合
     * @param parentId
     * @return
     */
    List<Permission> selectAllByParentId(Long parentId);

    /**
     *  通过用户编号查询这个用户所拥有的所有权限
     * @param userId
     * @return
     */
    List<Permission> queryByUserId(Long userId);

    /**
     * 根据用户编号删除这个用户独立拥有的权限,直接删除对应的userId
     * @param userId
     * @return
     */
    int deleteRelationByUserId(Long userId);

    /**
     * 批量设置用户和权限的关系,直接在sql里实现批量插入
     * @param userId
     * @param permissionIds
     * @return
     */
    int insertUserPermissionRelation(@Param("userId") Long userId, @Param("permissionIds") Long [] permissionIds);




    //    根据编号查询权限的接口
    Permission selectAllByPermissionId(Long permissionId);

    // 根据编号编辑权限的接口
    int updatePermissionById(Permission permission);








    //查询当前roleId对应的permission信息,用到role-permission表
    List<Permission> queryByRoleId(Long roleId);

    /**
     * 根据角色编号删除这个角色独立拥有的权限,直接删除对应的roleId
     * @param roleId
     * @return
     */
    int deleteRelationByRoleId(Long roleId);

    /**
     * 批量设置角色和权限的关系,直接在sql里实现批量插入,多个参数在mapper中需要@param
     * @param roleId
     * @param permissionIds
     * @return
     */
    int insertRolePermissionRelation(@Param("roleId") Long roleId,@Param("permissionIds") Long [] permissionIds);


    //插入权限
    int addPermission(Permission permission);


    Integer deleteUpdateSelect(Long[] permissionIds);





}
